/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package model.dao;

import model.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.beans.Cliente;
import model.beans.Conserto;
import model.beans.Pedido;
import model.beans.Produto;

/**
 *
 * @author Juliane Chaerki
 */
public class ConsertoDAO {
    private Connection con;
    private PreparedStatement stmtInserir;
    private PreparedStatement stmtListaC;
    private PreparedStatement stmtPagar;
    private PreparedStatement stmtBuscarEmail;
    private PreparedStatement stmtConsultar;
    private PreparedStatement stmtEfetivado;
    

    public ConsertoDAO() throws Exception {
        con = ConnectionFactory.getConnection();   
    }

    public ConsertoDAO(Connection con) throws Exception {
        this.con = con;
    }

    public int inserir(Conserto conserto) throws Exception {
        stmtInserir = con.prepareStatement("INSERT INTO conserto(idPedido, obs, dataEntrega, situacao) VALUES(?,?,?,'A')");
        stmtInserir.setInt(1, conserto.getPedido().getIdPedido());
        stmtInserir.setString(2, conserto.getObs());
        stmtInserir.setDate(3, new java.sql.Date(conserto.getDataEntrega().getTime()));
                
        stmtInserir.executeUpdate();
        
        stmtConsultar = con.prepareStatement("SELECT MAX(idConserto) as id FROM conserto");
        ResultSet rs = stmtConsultar.executeQuery();
        rs.next();
        int id = rs.getInt("id");
        return id;
    }
    
    public void pagar(int idConserto) throws Exception{
        stmtPagar = con.prepareStatement("UPDATE conserto SET dataPagamento = Date(Now()), situacao = 'F' WHERE idConserto = ?");
        stmtPagar.setInt(1, idConserto);
        stmtPagar.executeUpdate();
    }
    
    public List<Conserto> listaCombo() throws Exception{
        stmtListaC = con.prepareStatement("SELECT idConserto, idPedido FROM conserto WHERE situacao = 'A' ORDER BY idPedido");
        ResultSet rs = stmtListaC.executeQuery();
        
        List<Conserto> lista = new ArrayList();
        while(rs.next()){
            Pedido pedido = new Pedido(rs.getInt("idPedido"));
            Conserto conserto = new Conserto(rs.getInt("idConserto"), pedido);
            lista.add(conserto);
        }
        return lista;
    }
    
    public List<Conserto> listaEfetivado() throws Exception{
       stmtEfetivado = con.prepareStatement("SELECT idConserto, dataEntrega, c.idPedido, dataEntrada, valor, p.idProduto, pr.nome as produto, p.idCliente, cl.nome as cliente, dataEntrega \n" +
                                            "FROM conserto c\n" +
                                            "INNER JOIN pedido p\n" +
                                            "ON c.idPedido = p.idPedido\n" +
                                            "INNER JOIN produto pr\n" +
                                            "ON p.idProduto = pr.idProduto\n" +
                                            "INNER JOIN cliente cl\n" +
                                            "ON p.idCliente = cl.idCliente\n" +
                                            "WHERE dataEntrega = Date(Now())");
        ResultSet rs = stmtEfetivado.executeQuery();
        
        List<Conserto> lista = new ArrayList();
        while(rs.next()){
            Produto produto = new Produto();
            produto.setIdProduto(rs.getInt("idProduto"));
            produto.setNome(rs.getString("produto"));
            
            Cliente cliente = new Cliente();
            cliente.setIdCliente(rs.getInt("idCliente"));
            cliente.setNome(rs.getString("cliente"));
            
            Pedido pedido = new Pedido();
            pedido.setIdPedido(rs.getInt("idPedido"));
            pedido.setDataEntrada(rs.getDate("dataEntrada"));
            pedido.setValor(rs.getDouble("valor"));
            pedido.setCliente(cliente);
            pedido.setProduto(produto);
            
            Conserto conserto = new Conserto(rs.getInt("idConserto"), pedido);
            conserto.setDataEntrega(rs.getDate("dataEntrega"));
            lista.add(conserto);
        }
        return lista;
    }
    
   public String email(int idConserto){
        try{
            stmtBuscarEmail= con.prepareStatement("SELECT email \n" +
                                                    "FROM conserto c\n" +
                                                    "INNER JOIN pedido p\n" +
                                                    "ON c.idPedido = p.idPedido\n" +
                                                    "INNER JOIN cliente cl\n" +
                                                    "ON p.idCliente = cl.idCliente\n" +
                                                    "WHERE idConserto = ?");
            stmtBuscarEmail.setInt(1, idConserto);
            ResultSet rs = stmtBuscarEmail.executeQuery();
            StringBuilder email = new StringBuilder();
            while(rs.next()){
                email.append(rs.getString("email"));
                email.append(", ");
            }
            return email.toString();
        }catch(SQLException ex){
            return null;
        }
    }
    
    @Override
    public void finalize() throws Throwable{
        super.finalize();
        stmtInserir.close();
        stmtListaC.close();
        stmtPagar.close();
        stmtBuscarEmail.close();
        stmtConsultar.close();
        stmtEfetivado.close();
        con.close();
    }
}
